/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	IOptionMgr.java
 * 模块说明：	
 * 修改历史：
 * 2007-3-15 - lxm - 创建。
 */
package com.hd123.rumba.option;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.domain.IDomain;
import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.runtime.IManager;
import com.hd123.rumba.runtime.OperateContext;
import com.hd123.rumba.user.IUser;

/**
 * 系统选项 | 管理员 | 接口类
 * 
 * @author lxm
 * 
 */
public interface IOptionMgr extends IManager {

  /**
   * 创建一个选项取值集合对象。
   * 
   * @param domain
   *          指定所属域。
   * @param optionalClass
   *          指定对应的选项类。
   * @param user
   *          指定所属用户。允许null，表示创建的是指定域的全局选项取值集合。
   * @return 返回创建的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IOptionCollection createCollection(IDomain domain, Class optionalClass, IUser user)
      throws BusinessException, HibernateException;

  /**
   * 创建一个选项取值集合对象。
   * 
   * @param domain
   *          指定所属域。
   * @param optionalClassName
   *          指定对应的选项类名。
   * @param user
   *          指定所属用户。允许null，表示创建的是指定域的全局选项取值集合。
   * @return 返回创建的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IOptionCollection createCollection(IDomain domain, String optionalClassName, IUser user)
      throws BusinessException, HibernateException;

  /**
   * 创建一个选项取值项对象。
   * 
   * @param collection
   *          指定所属的选项取值集合对象。
   * @return 返回创建的选项取值项对象。
   * @throws BusinessException
   */
  public IOptionItem createItem(IOptionCollection collection) throws BusinessException;

  /**
   * 将指定的选项取值项加入到指定的选项取值集合中。
   * 
   * @param collection
   *          指定的选项取值集合对象。
   * @param item
   *          指定的选项取值项对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public void addItemToCollection(IOptionCollection collection, IOptionItem item)
      throws BusinessException, HibernateException;

  /**
   * 将选项取值项从指定的选项取值集合对象中删除。
   * 
   * @param collection
   *          指定的选项取值集合对象。
   * @param item
   *          指定的选项取值项对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public void removeItemFromCollection(IOptionCollection collection, IOptionItem item)
      throws BusinessException, HibernateException;

  /**
   * 保存选项取值集合对象到数据库。
   * 
   * @param collection
   *          指定被保存的选项取值集合对象。
   * @param operate
   * @throws BusinessException
   * @throws HibernateException
   */
  public void saveCollection(IOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * （物理）删除选项取值集合对象。<br>
   * 注：仅提供用于系统维护。
   * 
   * @param collection
   *          指定被删除的选项取值集合对象。
   * @param operate
   * @throws BusinessException
   * @throws HibernateException
   */
  public void removeCollection(IOptionCollection collection, OperateContext operate)
      throws BusinessException, HibernateException;

  /**
   * 选项取值集合对象间复制取值。
   * 
   * @param source
   *          指定作为源的选项取值集合对象。
   * @param target
   *          指定作为目的的选项取值集合对象。
   * @throws BusinessException
   * @throws HibernateException
   */
  public void copyItems(IOptionCollection source, IOptionCollection target)
      throws BusinessException, HibernateException;

  /**
   * 根据uuid取得选项取值集合对象。
   * 
   * @param uuid
   *          指定选项取值集合对象的uuid。
   * @return 返回取值的选项取值集合对象，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IOptionCollection getCollection(String uuid) throws BusinessException, HibernateException;

  /**
   * 根据选项类等业务主键信息查找选项取值集合对象。
   * 
   * @param domain
   *          指定选项取值集合对象所属域。
   * @param optionalClass
   *          指定的选项类。
   * @param user
   *          指定所属用户。允许null，表示查找的是指定域的全局选项取值集合。
   * @return 返回符合条件的选项取值集合对象，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IOptionCollection getCollectionByClass(IDomain domain, Class optionalClass, IUser user)
      throws BusinessException, HibernateException;

  /**
   * 根据选项类等业务主键信息查找选项取值集合对象。
   * 
   * @param domain
   *          指定选项取值集合对象所属域。
   * @param optionalClassName
   *          指定的选项类名。
   * @param user
   *          指定所属用户。允许null，表示查找的是指定域的全局选项取值集合。
   * @return 返回符合条件的选项取值集合对象，若找不到则返回null。
   * @throws BusinessException
   * @throws HibernateException
   */
  public IOptionCollection getCollectionByClass(IDomain domain, String optionalClassName, IUser user)
      throws BusinessException, HibernateException;
}
